/**
 * SSE Chat API
 * 使用 Server-Sent Events 实现流式对话
 */

const API_BASE_URL = 'http://localhost:8888/api'

/**
 @param {function} onError - 错误回调
 * 通过 SSE 方式与 Manus AI 对话
 * @param {string} message - 用户消息
 * @param {function} onMessage - 接收消息回调
 * @param {function} onComplete - 完成回调
 */
export const chatWithManusSSE = (message, onMessage, onComplete, onError) => {
  return new Promise((resolve, reject) => {
    // 构建 SSE 请求 URL
    const url = new URL(`${API_BASE_URL}/ai/manus/chat`)
    url.searchParams.append('message', message)

    console.log('🚀 开始 Manus SSE 连接:', url.toString())

    // 创建 EventSource 连接
    const eventSource = new EventSource(url.toString())
    
    let hasReceivedData = false
    let messageCount = 0

    eventSource.onopen = () => {
      console.log('✅ Manus SSE 连接已建立')
      clearTimeout(timeout)
    }

    eventSource.onmessage = (event) => {
      try {
        hasReceivedData = true
        messageCount++
        const data = event.data
        
        console.log(`📨 收到 Manus 消息 #${messageCount}:`, data.substring(0, 50) + (data.length > 50 ? '...' : ''))
        
        // 如果收到 [DONE] 标记，表示流结束
        if (data === '[DONE]' || data.trim() === '[DONE]') {
          console.log('✅ Manus 流式传输完成，共收到', messageCount, '条消息')
          eventSource.close()
          onComplete && onComplete()
          resolve()
          return
        }

        // 过滤空消息
        if (data && data.trim()) {
          onMessage && onMessage(data)
        }
      } catch (error) {
        console.error('❌ 解析 Manus 消息错误:', error, '原始数据:', event.data)
      }
    }

    eventSource.onerror = (error) => {
      console.error('❌ Manus SSE 连接错误:', error)
      console.error('📍 请求 URL:', url.toString())
      console.error('📊 EventSource 状态:', {
        readyState: eventSource.readyState,
        CONNECTING: EventSource.CONNECTING,
        OPEN: EventSource.OPEN,
        CLOSED: EventSource.CLOSED
      })
      console.error('📈 已接收数据:', hasReceivedData ? '是' : '否')
      console.error('📝 消息数量:', messageCount)
      
      eventSource.close()
      
      // 如果已经接收过数据，说明是中途断开，可能是正常结束
      if (hasReceivedData && messageCount > 0) {
        console.log('⚠️ 检测到连接中断，但已接收数据，尝试正常结束')
        onComplete && onComplete()
        resolve()
      } else {
        const errorMsg = new Error('Manus SSE 连接失败，请检查后端服务是否启动')
        onError && onError(errorMsg)
        reject(errorMsg)
      }
    }

    // 设置超时（可选，防止长时间无响应）
    const timeout = setTimeout(() => {
      if (eventSource.readyState !== EventSource.CLOSED) {
        console.warn('⏱️ Manus SSE 连接超时')
        eventSource.close()
        const timeoutError = new Error('请求超时')
        onError && onError(timeoutError)
        reject(timeoutError)
      }
    }, 120000) // 2分钟超时
  })
}

/**
 * 通过 SSE 方式与 AI 对话
 * @param {string} message - 用户消息
 * @param {string} chatId - 会话ID
 * @param {function} onMessage - 接收消息回调
 * @param {function} onComplete - 完成回调
 * @param {function} onError - 错误回调
 */
export const chatWithSSE = (message, chatId, onMessage, onComplete, onError) => {
  return new Promise((resolve, reject) => {
    // 构建 SSE 请求 URL
    const url = new URL(`${API_BASE_URL}/ai/guide_app/chat/sse`)
    url.searchParams.append('message', message)
    url.searchParams.append('chatId', chatId)

    console.log('🚀 开始 SSE 连接:', url.toString())

    // 创建 EventSource 连接
    const eventSource = new EventSource(url.toString())
    
    let hasReceivedData = false
    let messageCount = 0

    eventSource.onopen = () => {
      console.log('✅ SSE 连接已建立')
      clearTimeout(timeout)
    }

    eventSource.onmessage = (event) => {
      try {
        hasReceivedData = true
        messageCount++
        const data = event.data
        
        console.log(`📨 收到消息 #${messageCount}:`, data.substring(0, 50) + (data.length > 50 ? '...' : ''))
        
        // 如果收到 [DONE] 标记，表示流结束
        if (data === '[DONE]' || data.trim() === '[DONE]') {
          console.log('✅ 流式传输完成，共收到', messageCount, '条消息')
          eventSource.close()
          onComplete && onComplete()
          resolve()
          return
        }

        // 过滤空消息
        if (data && data.trim()) {
          onMessage && onMessage(data)
        }
      } catch (error) {
        console.error('❌ 解析消息错误:', error, '原始数据:', event.data)
      }
    }

    eventSource.onerror = (error) => {
      console.error('❌ SSE 连接错误:', error)
      console.error('📍 请求 URL:', url.toString())
      console.error('📊 EventSource 状态:', {
        readyState: eventSource.readyState,
        CONNECTING: EventSource.CONNECTING,
        OPEN: EventSource.OPEN,
        CLOSED: EventSource.CLOSED
      })
      console.error('📈 已接收数据:', hasReceivedData ? '是' : '否')
      console.error('📝 消息数量:', messageCount)
      
      eventSource.close()
      
      // 如果已经接收过数据，说明是中途断开，可能是正常结束
      if (hasReceivedData && messageCount > 0) {
        console.log('⚠️ 检测到连接中断，但已接收数据，尝试正常结束')
        onComplete && onComplete()
        resolve()
      } else {
        const errorMsg = new Error('SSE 连接失败，请检查后端服务是否启动')
        onError && onError(errorMsg)
        reject(errorMsg)
      }
    }

    // 设置超时（可选，防止长时间无响应）
    const timeout = setTimeout(() => {
      if (eventSource.readyState !== EventSource.CLOSED) {
        console.warn('⏱️ SSE 连接超时')
        eventSource.close()
        const timeoutError = new Error('请求超时')
        onError && onError(timeoutError)
        reject(timeoutError)
      }
    }, 120000) // 2分钟超时
  })
}

